#include <stdlib.h>
//
// Created by 啊汤哥 on 2025/9/15.
//
typedef struct LinkNode {
    int data;
    struct LinkNode *next;
};
typedef struct {
    LinkNode *front, *rear;
}LinkQueue;

void init_link_queue(LinkQueue *q) {
    q->front = q->rear = (LinkNode*)malloc(sizeof(LinkNode));
    q->front->next = NULL;
}
// 判断队列是否为空
bool EmptyQueue(LinkQueue q) {
    if (q.front == q.rear) {
        return true;
    }
    return false;
}
// 入队  插入数据要先分配空间
void EnHeadQueue(LinkQueue *q, int x) {
    LinkNode *s = (LinkNode*)malloc(sizeof(LinkNode));
    s->data = x;
    s->next = NULL;
    q->rear->next = s; // 插入链尾
    q->rear = s; // 修改尾指针
}

// 出队
// 出队
bool DeQueue(LinkQueue &q, int &x) {
    if (q.front == NULL) {  // 判断队列是否为空
        return false;
    }

    LinkNode *p = q.front;
    x = p->data;
    q.front = p->next;

    if (q.rear == p) {  // 如果出队的是最后一个元素
        q.rear = NULL;
    }

    free(p);
    return true;
}
